#手动登录
#登录完成以后跳到购票界面
#需要手动输入购票出发地、目的地、车次 时间 检测到这三个输入完成以后 执行点击事件 完成车次查询
#查询车次还有没有余票 (有、数字） 找到车次的预订按钮  执行点击事件   如果没有循环执行查询操作
#一旦检测到有票 执行点击  选择预订的用户 点击checkbox 提交订单
#提交订单以后 会有确认框  点击确认  整个购票完成

from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

class  QiangPiao(object):
    def __init__(self):
        self.login_url = "https://kyfw.12306.cn/otn/login/init"
        self.my12306_url = "https://kyfw.12306.cn/otn/view/index.html"
        self.search_url = 'https://kyfw.12306.cn/otn/leftTicket/init?linktypeid=dc'
        self.passenger_url = 'https://kyfw.12306.cn/otn/confirmPassenger/initDc'
        self.driver = webdriver.Chrome()
    def wait_input(self):
        self.from_station = input("出发地:")
        self.to_station = input("目的地:")
        #yyyy-MM-dd
        self.depart_time = input("出发时间:")
        self.passengers = input("乘客姓名:多个乘客用英文,隔开:").split(',')
        self.trains = input("车次:多个车次,隔开:").split(',')
    # def init_wait(self):

    def _login(self):
        self.driver.get(self.login_url)
        WebDriverWait(self.driver,1000).until(
            EC.url_to_be(self.my12306_url)
        )
        print("登录成功")

    def _order_ticket(self):
        #查余票的界面
        self.driver.get(self.search_url)
        #等待出发地是否输入正确
        # print(self.from_station)

        WebDriverWait(self.driver,1000).until(
            EC.text_to_be_present_in_element_value((By.ID,'fromStationText'),self.from_station)
        )
        # 等待目的地是否输入正确


        WebDriverWait(self.driver,1000).until(
            EC.text_to_be_present_in_element_value((By.ID, 'toStationText'), self.to_station)
        )
        # 等待出发日期是否输入正确
        WebDriverWait(self.driver,1000).until(
            EC.text_to_be_present_in_element_value((By.ID, 'train_date'), self.depart_time)
        )

        #查询按钮是否可用
        WebDriverWait(self.driver,1000).until(
            EC.element_to_be_clickable((By.ID, 'query_ticket'))
        )
        #如果能被点击就找到这个查询按钮
        searchBtn = self.driver.find_element_by_id('query_ticket')
        searchBtn.click()

        #等待车次信息是否展示出来了
        WebDriverWait(self.driver, 1000).until(
            EC.presence_of_element_located((By.XPATH, './/tbody[@id="queryLeftTable"]/tr'))
        )

        #查找包含车次信息的

        tr_list = self.driver.find_elements_by_xpath(".//tbody[@id='queryLeftTable']/tr[not(@datatran)]")
        for tr in tr_list:
            #获取车次信息
            train_numer = tr.find_element_by_class_name("number").text
            if train_numer in self.trains:
                #二等座票
                left_ticket = tr.find_element_by_xpath(".//td[4]").text
                #票 有或者 是数字 认为是有票
                if left_ticket == "有" or left_ticket.isdigit:
                    orderBtn = tr.find_element_by_class_name("btn72")
                    orderBtn.click()
                    #等待你确实来了这个页面
                    WebDriverWait(self.driver, 1000).until(
                        EC.url_to_be(self.passenger_url)
                    )

                    #等待所有的乘客都被加载过来了
                    WebDriverWait(self.driver, 1000).until(
                        EC.presence_of_element_located((By.XPATH,".//ul[@id='normal_passenger_id']/li"))
                    )


                    #获取所有的乘客信息

                    passenger_labels = self.driver.find_elements_by_xpath(".//ul[@id='normal_passenger_id']/li/label")
                    for passenger_label in passenger_labels:
                        name = passenger_label.text
                        if name in self.passengers:
                            passenger_label.click()

                    #获取提交订单的按钮

                    submitBtn = self.driver.find_element_by_id('submitOrder_id')
                    submitBtn.click()


                    #等待是否出来了对话框
                    WebDriverWait(self.driver, 1000).until(
                        EC.presence_of_element_located((By.CLASS_NAME, 'dhtmlx_wins_body_outer'))
                    )


                    #等待按钮是否也是出现了
                    WebDriverWait(self.driver, 1000).until(
                        EC.presence_of_element_located((By.ID, 'qr_submit_id'))
                    )

                    confirmBtn = self.driver.find_element_by_id('qr_submit_id')
                    confirmBtn.click()
                    while confirmBtn:
                        confirmBtn.click()
                        confirmBtn = self.driver.find_element_by_id('qr_submit_id')
                    return



        #遍历车次信息

    def run(self):
        # self.init_wait()
        self.wait_input()
        self._login()
        self._order_ticket()

if __name__ == "__main__":
    spider = QiangPiao()
    spider.run()

